package Menus;

import java.awt.Color;
import java.awt.Graphics;
import java.util.List;
import java.util.ArrayList;

import AI.AiEntity;
import AI.Person;
import AI.Crew.Crew;
import Constructions.Construction;
import Constructions.EnemyConstructions.EnemyConstruction;
import FrameWork.Menu;
import Items.Item;
import Main.SpaceGame;
import Power.PowerNode;
import World.Tile;
import World.TileType;

public class CursorMenu extends Menu
{
	int pixXPos = SpaceGame.windowXSize-200;
	int pixYPos = 100;
	int width = 200;
	int height = SpaceGame.windowYSize-100;
	int level = 1;
	SpaceGame main;
	boolean cursorRequirement = true;
	public CursorMenu(SpaceGame main) 
	{
		this.main = main;
	}

	public void draw(Graphics g)
	{
		g.translate(pixXPos, pixYPos);
		g.setColor(Color.LIGHT_GRAY);
		g.fillRect(0, 0, width, height);
		g.setColor(Color.DARK_GRAY);
		g.fillRect(5, 5, width-10, height-10);
		
		Tile cursorTile = main.world.tiles[main.cursor.getX()][main.cursor.getY()];
		int oxygenPer = (int)(main.world.tiles[main.cursor.getX()][main.cursor.getY()].getOxygen()+.5);
		
		List<String> lines = new ArrayList<String>();
		List<Color>  colors= new ArrayList<Color>();
		
		if(!cursorTile.getType().isSolid() && cursorTile.getType() != TileType.Space)
		{
			int red = (int) (255-(oxygenPer*2.55));
			int green = (int) (oxygenPer*2.44+1);
			colors.add(new Color(red,green,0));
			lines.add("Oxygen: "+oxygenPer+"%");
		}
		
		for(AiEntity e:main.aiManager.entityList)
		{
			if (e.getX() == main.cursor.getX() && e.getY() == main.cursor.getY())
			{
				colors.add(Color.GREEN);
				if (e instanceof Crew)
					lines.add(e.getClass().getSimpleName() +" " + ((Person) e).getName());
				else
					lines.add(e.getClass().getSimpleName()+"");
			}
		}
		
		for(Construction c:main.constructionManager.constructionList)
		{
			if (main.cursor.getX() >= c.getX() && main.cursor.getX() <= c.getX()+c.getWidth()-1 && main.cursor.getY() >= c.getY() && main.cursor.getY() <= c.getY()+c.getWidth()-1)
			{
				colors.add(Color.yellow);
				{
					lines.add(c.getName());
				}
			}
		}
		for(PowerNode c:main.powerManager.nodeList)
		{
			if (main.cursor.getX() >= c.getX() && main.cursor.getX() <= c.getX()+c.getWidth()-1 && main.cursor.getY() >= c.getY() && main.cursor.getY() <= c.getY()+c.getWidth()-1)
			{
				colors.add(Color.yellow);
				{
					lines.add(c.getName());
				}
			}
		}
		for(EnemyConstruction c:main.constructionManager.enemyConstructionManager.constructionList)
		{
			if (main.cursor.getX() >= c.getX() && main.cursor.getX() <= c.getX()+c.getWidth()-1 && main.cursor.getY() >= c.getY() && main.cursor.getY() <= c.getY()+c.getWidth()-1)
			{
				colors.add(Color.yellow);
				{
					lines.add(c.getName());
				}
			}
		}
		
		for(Item i:main.itemManager.itemList)
		{
			if(main.cursor.getX() == i.x && main.cursor.getY() == i.y)
			{
				colors.add(Color.MAGENTA);
				lines.add(i.getText());
			}
		}
		
		colors.add(Color.cyan);
		lines.add("" + cursorTile.getType());
		printLines(g, lines,colors);
		g.translate(-pixXPos, -pixYPos);
	}

	@Override
	public int getLevel() 
	{
		return level;
	}

	@Override
	public boolean requiresCursor() 
	{
		return cursorRequirement;
	}

	@Override
	public void setRequiresCursor(boolean f)
	{
		this.cursorRequirement = f;
	}
}
